package com.scr1pt.extension

import java.lang.reflect.Method
import java.lang.reflect.ParameterizedType

/**
 * 说明: Java方法扩展
 *
 * 创建者: tum0r
 *
 * 时间: 2021/9/8 11:47
 */

/**
 * 获取方法的参数的范型类型
 *
 * @param[index] 方法的参数下标
 */
fun Method.genericClass(index: Int): Array<Class<*>?> {
    val count = this.parameterCount - 1
    if (index !in 0..count) return Array(0) { null }
    val arguments = (this.genericParameterTypes[count] as ParameterizedType).actualTypeArguments
    val result = Array<Class<*>?>(arguments.size) { null }
    for (i in arguments.indices)
        result[i] = arguments[i] as Class<*>
    return result
}